home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / asm-generic / siginfo.h < prev    next >
C/C++ Source or Header  |  2009-10-16  |  8KB  |  262 lines

  1. #ifndef _ASM_GENERIC_SIGINFO_H
  2. #define _ASM_GENERIC_SIGINFO_H
  3.  
  4.  
  5. #include <linux/types.h>
  6.  
  7. typedef union sigval {
  8.     int sival_int;
  9.     void *sival_ptr;
  10. } sigval_t;
  11.  
  12. /*
  13.  * This is the size (including padding) of the part of the
  14.  * struct siginfo that is before the union.
  15.  */
  16. #ifndef __ARCH_SI_PREAMBLE_SIZE
  17. #define __ARCH_SI_PREAMBLE_SIZE    (3 * sizeof(int))
  18. #endif
  19.  
  20. #define SI_MAX_SIZE    128
  21. #ifndef SI_PAD_SIZE
  22. #define SI_PAD_SIZE    ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
  23. #endif
  24.  
  25. #ifndef __ARCH_SI_UID_T
  26. #define __ARCH_SI_UID_T    __kernel_uid32_t
  27. #endif
  28.  
  29. /*
  30.  * The default "si_band" type is "long", as specified by POSIX.
  31.  * However, some architectures want to override this to "int"
  32.  * for historical compatibility reasons, so we allow that.
  33.  */
  34. #ifndef __ARCH_SI_BAND_T
  35. #define __ARCH_SI_BAND_T long
  36. #endif
  37.  
  38. #ifndef HAVE_ARCH_SIGINFO_T
  39.  
  40. typedef struct siginfo {
  41.     int si_signo;
  42.     int si_errno;
  43.     int si_code;
  44.  
  45.     union {
  46.         int _pad[SI_PAD_SIZE];
  47.  
  48.         /* kill() */
  49.         struct {
  50.             __kernel_pid_t _pid;    /* sender's pid */
  51.             __ARCH_SI_UID_T _uid;    /* sender's uid */
  52.         } _kill;
  53.  
  54.         /* POSIX.1b timers */
  55.         struct {
  56.             __kernel_timer_t _tid;    /* timer id */
  57.             int _overrun;        /* overrun count */
  58.             char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
  59.             sigval_t _sigval;    /* same as below */
  60.             int _sys_private;       /* not to be passed to user */
  61.         } _timer;
  62.  
  63.         /* POSIX.1b signals */
  64.         struct {
  65.             __kernel_pid_t _pid;    /* sender's pid */
  66.             __ARCH_SI_UID_T _uid;    /* sender's uid */
  67.             sigval_t _sigval;
  68.         } _rt;
  69.  
  70.         /* SIGCHLD */
  71.         struct {
  72.             __kernel_pid_t _pid;    /* which child */
  73.             __ARCH_SI_UID_T _uid;    /* sender's uid */
  74.             int _status;        /* exit code */
  75.             __kernel_clock_t _utime;
  76.             __kernel_clock_t _stime;
  77.         } _sigchld;
  78.  
  79.         /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
  80.         struct {
  81.             void *_addr; /* faulting insn/memory ref. */
  82. #ifdef __ARCH_SI_TRAPNO
  83.             int _trapno;    /* TRAP # which caused the signal */
  84. #endif
  85.         } _sigfault;
  86.  
  87.         /* SIGPOLL */
  88.         struct {
  89.             __ARCH_SI_BAND_T _band;    /* POLL_IN, POLL_OUT, POLL_MSG */
  90.             int _fd;
  91.         } _sigpoll;
  92.     } _sifields;
  93. } siginfo_t;
  94.  
  95. #endif
  96.  
  97. /*
  98.  * How these fields are to be accessed.
  99.  */
  100. #define si_pid        _sifields._kill._pid
  101. #define si_uid        _sifields._kill._uid
  102. #define si_tid        _sifields._timer._tid
  103. #define si_overrun    _sifields._timer._overrun
  104. #define si_sys_private  _sifields._timer._sys_private
  105. #define si_status    _sifields._sigchld._status
  106. #define si_utime    _sifields._sigchld._utime
  107. #define si_stime    _sifields._sigchld._stime
  108. #define si_value    _sifields._rt._sigval
  109. #define si_int        _sifields._rt._sigval.sival_int
  110. #define si_ptr        _sifields._rt._sigval.sival_ptr
  111. #define si_addr        _sifields._sigfault._addr
  112. #ifdef __ARCH_SI_TRAPNO
  113. #define si_trapno    _sifields._sigfault._trapno
  114. #endif
  115. #define si_band        _sifields._sigpoll._band
  116. #define si_fd        _sifields._sigpoll._fd
  117.  
  118. #define __SI_KILL    0
  119. #define __SI_TIMER    0
  120. #define __SI_POLL    0
  121. #define __SI_FAULT    0
  122. #define __SI_CHLD    0
  123. #define __SI_RT        0
  124. #define __SI_MESGQ    0
  125. #define __SI_CODE(T,N)    (N)
  126.  
  127. /*
  128.  * si_code values
  129.  * Digital reserves positive values for kernel-generated signals.
  130.  */
  131. #define SI_USER        0        /* sent by kill, sigsend, raise */
  132. #define SI_KERNEL    0x80        /* sent by the kernel from somewhere */
  133. #define SI_QUEUE    -1        /* sent by sigqueue */
  134. #define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
  135. #define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
  136. #define SI_ASYNCIO    -4        /* sent by AIO completion */
  137. #define SI_SIGIO    -5        /* sent by queued SIGIO */
  138. #define SI_TKILL    -6        /* sent by tkill system call */
  139. #define SI_DETHREAD    -7        /* sent by execve() killing subsidiary threads */
  140.  
  141. #define SI_FROMUSER(siptr)    ((siptr)->si_code <= 0)
  142. #define SI_FROMKERNEL(siptr)    ((siptr)->si_code > 0)
  143.  
  144. /*
  145.  * SIGILL si_codes
  146.  */
  147. #define ILL_ILLOPC    (__SI_FAULT|1)    /* illegal opcode */
  148. #define ILL_ILLOPN    (__SI_FAULT|2)    /* illegal operand */
  149. #define ILL_ILLADR    (__SI_FAULT|3)    /* illegal addressing mode */
  150. #define ILL_ILLTRP    (__SI_FAULT|4)    /* illegal trap */
  151. #define ILL_PRVOPC    (__SI_FAULT|5)    /* privileged opcode */
  152. #define ILL_PRVREG    (__SI_FAULT|6)    /* privileged register */
  153. #define ILL_COPROC    (__SI_FAULT|7)    /* coprocessor error */
  154. #define ILL_BADSTK    (__SI_FAULT|8)    /* internal stack error */
  155. #define NSIGILL        8
  156.  
  157. /*
  158.  * SIGFPE si_codes
  159.  */
  160. #define FPE_INTDIV    (__SI_FAULT|1)    /* integer divide by zero */
  161. #define FPE_INTOVF    (__SI_FAULT|2)    /* integer overflow */
  162. #define FPE_FLTDIV    (__SI_FAULT|3)    /* floating point divide by zero */
  163. #define FPE_FLTOVF    (__SI_FAULT|4)    /* floating point overflow */
  164. #define FPE_FLTUND    (__SI_FAULT|5)    /* floating point underflow */
  165. #define FPE_FLTRES    (__SI_FAULT|6)    /* floating point inexact result */
  166. #define FPE_FLTINV    (__SI_FAULT|7)    /* floating point invalid operation */
  167. #define FPE_FLTSUB    (__SI_FAULT|8)    /* subscript out of range */
  168. #define NSIGFPE        8
  169.  
  170. /*
  171.  * SIGSEGV si_codes
  172.  */
  173. #define SEGV_MAPERR    (__SI_FAULT|1)    /* address not mapped to object */
  174. #define SEGV_ACCERR    (__SI_FAULT|2)    /* invalid permissions for mapped object */
  175. #define NSIGSEGV    2
  176.  
  177. /*
  178.  * SIGBUS si_codes
  179.  */
  180. #define BUS_ADRALN    (__SI_FAULT|1)    /* invalid address alignment */
  181. #define BUS_ADRERR    (__SI_FAULT|2)    /* non-existant physical address */
  182. #define BUS_OBJERR    (__SI_FAULT|3)    /* object specific hardware error */
  183. #define NSIGBUS        3
  184.  
  185. /*
  186.  * SIGTRAP si_codes
  187.  */
  188. #define TRAP_BRKPT    (__SI_FAULT|1)    /* process breakpoint */
  189. #define TRAP_TRACE    (__SI_FAULT|2)    /* process trace trap */
  190. #define TRAP_BRANCH     (__SI_FAULT|3)  /* process taken branch trap */
  191. #define TRAP_HWBKPT     (__SI_FAULT|4)  /* hardware breakpoint/watchpoint */
  192. #define NSIGTRAP    4
  193.  
  194. /*
  195.  * SIGCHLD si_codes
  196.  */
  197. #define CLD_EXITED    (__SI_CHLD|1)    /* child has exited */
  198. #define CLD_KILLED    (__SI_CHLD|2)    /* child was killed */
  199. #define CLD_DUMPED    (__SI_CHLD|3)    /* child terminated abnormally */
  200. #define CLD_TRAPPED    (__SI_CHLD|4)    /* traced child has trapped */
  201. #define CLD_STOPPED    (__SI_CHLD|5)    /* child has stopped */
  202. #define CLD_CONTINUED    (__SI_CHLD|6)    /* stopped child has continued */
  203. #define NSIGCHLD    6
  204.  
  205. /*
  206.  * SIGPOLL si_codes
  207.  */
  208. #define POLL_IN        (__SI_POLL|1)    /* data input available */
  209. #define POLL_OUT    (__SI_POLL|2)    /* output buffers available */
  210. #define POLL_MSG    (__SI_POLL|3)    /* input message available */
  211. #define POLL_ERR    (__SI_POLL|4)    /* i/o error */
  212. #define POLL_PRI    (__SI_POLL|5)    /* high priority input available */
  213. #define POLL_HUP    (__SI_POLL|6)    /* device disconnected */
  214. #define NSIGPOLL    6
  215.  
  216. /*
  217.  * sigevent definitions
  218.  * 
  219.  * It seems likely that SIGEV_THREAD will have to be handled from 
  220.  * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
  221.  * thread manager then catches and does the appropriate nonsense.
  222.  * However, everything is written out here so as to not get lost.
  223.  */
  224. #define SIGEV_SIGNAL    0    /* notify via signal */
  225. #define SIGEV_NONE    1    /* other notification: meaningless */
  226. #define SIGEV_THREAD    2    /* deliver via thread creation */
  227. #define SIGEV_THREAD_ID 4    /* deliver to thread */
  228.  
  229. /*
  230.  * This works because the alignment is ok on all current architectures
  231.  * but we leave open this being overridden in the future
  232.  */
  233. #ifndef __ARCH_SIGEV_PREAMBLE_SIZE
  234. #define __ARCH_SIGEV_PREAMBLE_SIZE    (sizeof(int) * 2 + sizeof(sigval_t))
  235. #endif
  236.  
  237. #define SIGEV_MAX_SIZE    64
  238. #define SIGEV_PAD_SIZE    ((SIGEV_MAX_SIZE - __ARCH_SIGEV_PREAMBLE_SIZE) \
  239.         / sizeof(int))
  240.  
  241. typedef struct sigevent {
  242.     sigval_t sigev_value;
  243.     int sigev_signo;
  244.     int sigev_notify;
  245.     union {
  246.         int _pad[SIGEV_PAD_SIZE];
  247.          int _tid;
  248.  
  249.         struct {
  250.             void (*_function)(sigval_t);
  251.             void *_attribute;    /* really pthread_attr_t */
  252.         } _sigev_thread;
  253.     } _sigev_un;
  254. } sigevent_t;
  255.  
  256. #define sigev_notify_function    _sigev_un._sigev_thread._function
  257. #define sigev_notify_attributes    _sigev_un._sigev_thread._attribute
  258. #define sigev_notify_thread_id     _sigev_un._tid
  259.  
  260.  
  261. #endif
  262.